#include "Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
b3TypedConstraintData* bullet_Newb3TypedConstraintData(){
	b3TypedConstraintData* wrap_out = new b3TypedConstraintData();
	return wrap_out;
}

float bullet_b3TypedConstraintData_GetFieldOfM_appliedImpulse(b3TypedConstraintData* c_this){
	return (float)(c_this->m_appliedImpulse);
}

int bullet_b3TypedConstraintData_GetFieldOfM_bodyA(b3TypedConstraintData* c_this){
	return (int)(c_this->m_bodyA);
}

int bullet_b3TypedConstraintData_GetFieldOfM_bodyB(b3TypedConstraintData* c_this){
	return (int)(c_this->m_bodyB);
}

float bullet_b3TypedConstraintData_GetFieldOfM_breakingImpulseThreshold(b3TypedConstraintData* c_this){
	return (float)(c_this->m_breakingImpulseThreshold);
}

float bullet_b3TypedConstraintData_GetFieldOfM_dbgDrawSize(b3TypedConstraintData* c_this){
	return (float)(c_this->m_dbgDrawSize);
}

int bullet_b3TypedConstraintData_GetFieldOfM_disableCollisionsBetweenLinkedBodies(b3TypedConstraintData* c_this){
	return (int)(c_this->m_disableCollisionsBetweenLinkedBodies);
}

int bullet_b3TypedConstraintData_GetFieldOfM_isEnabled(b3TypedConstraintData* c_this){
	return (int)(c_this->m_isEnabled);
}

char** bullet_b3TypedConstraintData_GetFieldOfM_name(b3TypedConstraintData* c_this){
	return (char**)(&c_this->m_name);
}

int bullet_b3TypedConstraintData_GetFieldOfM_needsFeedback(b3TypedConstraintData* c_this){
	return (int)(c_this->m_needsFeedback);
}

int bullet_b3TypedConstraintData_GetFieldOfM_objectType(b3TypedConstraintData* c_this){
	return (int)(c_this->m_objectType);
}

int bullet_b3TypedConstraintData_GetFieldOfM_overrideNumSolverIterations(b3TypedConstraintData* c_this){
	return (int)(c_this->m_overrideNumSolverIterations);
}

int bullet_b3TypedConstraintData_GetFieldOfM_userConstraintId(b3TypedConstraintData* c_this){
	return (int)(c_this->m_userConstraintId);
}

int bullet_b3TypedConstraintData_GetFieldOfM_userConstraintType(b3TypedConstraintData* c_this){
	return (int)(c_this->m_userConstraintType);
}

b3TypedConstraint::b3ConstraintInfo2* bullet_Newb3TypedConstraintb3ConstraintInfo2(){
	b3TypedConstraint::b3ConstraintInfo2* wrap_out = new b3TypedConstraint::b3ConstraintInfo2();
	return wrap_out;
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfCfm(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->cfm);
}

float bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfErp(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float)(c_this->erp);
}

int** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfFindex(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (int**)(&c_this->findex);
}

float bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfFps(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float)(c_this->fps);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_constraintError(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_constraintError);
}

float bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_damping(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float)(c_this->m_damping);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_J1angularAxis(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_J1angularAxis);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_J1linearAxis(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_J1linearAxis);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_J2angularAxis(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_J2angularAxis);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_J2linearAxis(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_J2linearAxis);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_lowerLimit(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_lowerLimit);
}

int bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_numIterations(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (int)(c_this->m_numIterations);
}

float** bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfM_upperLimit(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (float**)(&c_this->m_upperLimit);
}

int bullet_b3TypedConstraintb3ConstraintInfo2_GetFieldOfRowskip(b3TypedConstraint::b3ConstraintInfo2* c_this){
	return (int)(c_this->rowskip);
}

b3TypedConstraint::b3ConstraintInfo1* bullet_Newb3TypedConstraintb3ConstraintInfo1(){
	b3TypedConstraint::b3ConstraintInfo1* wrap_out = new b3TypedConstraint::b3ConstraintInfo1();
	return wrap_out;
}

int bullet_b3TypedConstraintb3ConstraintInfo1_GetFieldOfM_numConstraintRows(b3TypedConstraint::b3ConstraintInfo1* c_this){
	return (int)(c_this->m_numConstraintRows);
}

int bullet_b3TypedConstraintb3ConstraintInfo1_GetFieldOfNub(b3TypedConstraint::b3ConstraintInfo1* c_this){
	return (int)(c_this->nub);
}

void bullet_b3TypedConstraint_enableFeedback(b3TypedConstraint* c_this,bool needsFeedback){
	bool c_arg_needsFeedback=needsFeedback;
	c_this->enableFeedback(c_arg_needsFeedback);
}

float bullet_b3TypedConstraint_getAppliedImpulse(b3TypedConstraint* c_this){
	b3Scalar c_out = c_this->getAppliedImpulse();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3TypedConstraint_getBreakingImpulseThreshold(b3TypedConstraint* c_this){
	b3Scalar c_out = c_this->getBreakingImpulseThreshold();
	float wrap_out = (c_out);
	return wrap_out;
}

b3TypedConstraintType bullet_b3TypedConstraint_getConstraintType(b3TypedConstraint* c_this){
	b3TypedConstraintType c_out = c_this->getConstraintType();
	b3TypedConstraintType wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3TypedConstraint_getDbgDrawSize(b3TypedConstraint* c_this){
	b3Scalar c_out = c_this->getDbgDrawSize();
	float wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getOverrideNumSolverIterations(b3TypedConstraint* c_this){
	int c_out = c_this->getOverrideNumSolverIterations();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getRigidBodyA(b3TypedConstraint* c_this){
	int c_out = c_this->getRigidBodyA();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getRigidBodyA1(b3TypedConstraint* c_this){
	int c_out = c_this->getRigidBodyA();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getRigidBodyB(b3TypedConstraint* c_this){
	int c_out = c_this->getRigidBodyB();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getRigidBodyB1(b3TypedConstraint* c_this){
	int c_out = c_this->getRigidBodyB();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getUid(b3TypedConstraint* c_this){
	int c_out = c_this->getUid();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getUserConstraintId(b3TypedConstraint* c_this){
	int c_out = c_this->getUserConstraintId();
	int wrap_out = (c_out);
	return wrap_out;
}

void* bullet_b3TypedConstraint_getUserConstraintPtr(b3TypedConstraint* c_this){
	void * c_out = c_this->getUserConstraintPtr();
	void* wrap_out = (void*)(void*)(c_out);
	return wrap_out;
}

int bullet_b3TypedConstraint_getUserConstraintType(b3TypedConstraint* c_this){
	int c_out = c_this->getUserConstraintType();
	int wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3TypedConstraint_internalGetAppliedImpulse(b3TypedConstraint* c_this){
	b3Scalar c_out = c_this->internalGetAppliedImpulse();
	float wrap_out = (c_out);
	return wrap_out;
}

void bullet_b3TypedConstraint_internalSetAppliedImpulse(b3TypedConstraint* c_this,float appliedImpulse){
	b3Scalar c_arg_appliedImpulse=appliedImpulse;
	c_this->internalSetAppliedImpulse(c_arg_appliedImpulse);
}

bool bullet_b3TypedConstraint_isEnabled(b3TypedConstraint* c_this){
	bool c_out = c_this->isEnabled();
	bool wrap_out = (c_out);
	return wrap_out;
}

bool bullet_b3TypedConstraint_needsFeedback(b3TypedConstraint* c_this){
	bool c_out = c_this->needsFeedback();
	bool wrap_out = (c_out);
	return wrap_out;
}

void bullet_b3TypedConstraint_setBreakingImpulseThreshold(b3TypedConstraint* c_this,float threshold){
	b3Scalar c_arg_threshold=threshold;
	c_this->setBreakingImpulseThreshold(c_arg_threshold);
}

void bullet_b3TypedConstraint_setDbgDrawSize(b3TypedConstraint* c_this,float dbgDrawSize){
	b3Scalar c_arg_dbgDrawSize=dbgDrawSize;
	c_this->setDbgDrawSize(c_arg_dbgDrawSize);
}

void bullet_b3TypedConstraint_setEnabled(b3TypedConstraint* c_this,bool enabled){
	bool c_arg_enabled=enabled;
	c_this->setEnabled(c_arg_enabled);
}

void bullet_b3TypedConstraint_setJointFeedback(b3TypedConstraint* c_this,b3JointFeedback* jointFeedback){
	b3JointFeedback * c_arg_jointFeedback=(b3JointFeedback *)(void*)(jointFeedback);
	c_this->setJointFeedback(c_arg_jointFeedback);
}

void bullet_b3TypedConstraint_setOverrideNumSolverIterations(b3TypedConstraint* c_this,int overideNumIterations){
	int c_arg_overideNumIterations=overideNumIterations;
	c_this->setOverrideNumSolverIterations(c_arg_overideNumIterations);
}

void bullet_b3TypedConstraint_setUserConstraintId(b3TypedConstraint* c_this,int uid){
	int c_arg_uid=uid;
	c_this->setUserConstraintId(c_arg_uid);
}

void bullet_b3TypedConstraint_setUserConstraintPtr(b3TypedConstraint* c_this,void* ptr){
	void * c_arg_ptr=(void *)(void*)(ptr);
	c_this->setUserConstraintPtr(c_arg_ptr);
}

void bullet_b3TypedConstraint_setUserConstraintType(b3TypedConstraint* c_this,int userConstraintType){
	int c_arg_userConstraintType=userConstraintType;
	c_this->setUserConstraintType(c_arg_userConstraintType);
}

b3JointFeedback* bullet_Newb3JointFeedback(){
	b3JointFeedback* wrap_out = new b3JointFeedback();
	return wrap_out;
}

b3Vector3* bullet_b3JointFeedback_GetFieldOfM_appliedForceBodyA(b3JointFeedback* c_this){
	return (b3Vector3*)(&c_this->m_appliedForceBodyA);
}

b3Vector3* bullet_b3JointFeedback_GetFieldOfM_appliedForceBodyB(b3JointFeedback* c_this){
	return (b3Vector3*)(&c_this->m_appliedForceBodyB);
}

b3Vector3* bullet_b3JointFeedback_GetFieldOfM_appliedTorqueBodyA(b3JointFeedback* c_this){
	return (b3Vector3*)(&c_this->m_appliedTorqueBodyA);
}

b3Vector3* bullet_b3JointFeedback_GetFieldOfM_appliedTorqueBodyB(b3JointFeedback* c_this){
	return (b3Vector3*)(&c_this->m_appliedTorqueBodyB);
}

b3AngularLimit* bullet_Newb3AngularLimit(){
	b3AngularLimit* wrap_out = new b3AngularLimit();
	return wrap_out;
}

void bullet_b3AngularLimit_fit(b3AngularLimit* c_this,float* angle){
	b3Scalar& c_arg_angle=(b3Scalar&)(*angle);
	c_this->fit(c_arg_angle);
}

float bullet_b3AngularLimit_getBiasFactor(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getBiasFactor();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getCorrection(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getCorrection();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getError(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getError();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getHalfRange(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getHalfRange();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getHigh(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getHigh();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getLow(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getLow();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getRelaxationFactor(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getRelaxationFactor();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getSign(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getSign();
	float wrap_out = (c_out);
	return wrap_out;
}

float bullet_b3AngularLimit_getSoftness(b3AngularLimit* c_this){
	b3Scalar c_out = c_this->getSoftness();
	float wrap_out = (c_out);
	return wrap_out;
}

bool bullet_b3AngularLimit_isLimit(b3AngularLimit* c_this){
	bool c_out = c_this->isLimit();
	bool wrap_out = (c_out);
	return wrap_out;
}

void bullet_b3AngularLimit_set(b3AngularLimit* c_this,float low,float high,float _softness,float _biasFactor,float _relaxationFactor){
	b3Scalar c_arg_low=low;
	b3Scalar c_arg_high=high;
	b3Scalar c_arg__softness=_softness;
	b3Scalar c_arg__biasFactor=_biasFactor;
	b3Scalar c_arg__relaxationFactor=_relaxationFactor;
	c_this->set(c_arg_low,c_arg_high,c_arg__softness,c_arg__biasFactor,c_arg__relaxationFactor);
}

void bullet_b3AngularLimit_test(b3AngularLimit* c_this,float angle){
	b3Scalar const c_arg_angle=angle;
	c_this->test(c_arg_angle);
}

#ifdef __cplusplus
}
#endif
